package com.tfy.liquor.service.impl;

import com.tfy.liquor.bean.Result;
import com.tfy.liquor.bean.UserInfo;
import com.tfy.liquor.bean.UserPurse;
import com.tfy.liquor.dao.UserInfoDao;
import com.tfy.liquor.service.UserInfoService;
import com.tfy.liquor.service.UserPurseService;
import com.tfy.liquor.util.CodeUtils;
import com.tfy.liquor.util.DateUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;

/**
 * 用户信息
 */
@Service
public class UserInfoServiceImpl implements UserInfoService {
    @Autowired
    private UserInfoDao userInfoDao;
    @Autowired
    private UserPurseService userPurseService;

    // 用户登录
    @Override
    public Result userInfoLogin(UserInfo userInfo) {
        UserInfo userInfo1 = userInfoDao.getUserInfo(userInfo.getPhone());
        if (null == userInfo1) {
            return new Result().error("账户未注册！");
        } else if (userInfo1.getStatus() == 1) {
            return new Result().error("账户已冻结！");
        }
        if (userInfo1.getPassword().equals(CodeUtils.md5Hex(userInfo.getPassword(), userInfo1.getSalt()))) {
            // 将关键信息取消
            userInfo1.setSalt("");
            userInfo1.setPassword("");
            // 然后将其他信息返回
            return new Result(userInfo1).ok("登录成功！");
        } else {
            return new Result().error("账户或者密码错误！");
        }
    }

    // 添加用户信息
    @Override
    public Boolean addUserInfo(UserInfo userInfo) {
        // 加密明文密码
        String salt = CodeUtils.generateSalt();
        userInfo.setSalt(salt); // 添加随机盐
        userInfo.setPassword(CodeUtils.md5Hex(userInfo.getPassword(), salt)); // 根据盐加密密码
        userInfo.setCreateTime(DateUtil.getNowDateTime()); // 获取当前时间
        // 添加数据
        userInfoDao.addUserInfo(userInfo);
        // 用户注册之后注册钱包，钱包密码手机号后六位
        UserPurse userPurse = new UserPurse();
        // 获取新增用户的用户id
        userPurse.setUserId(userInfoDao.getUserInfoUserId(userInfo.getPhone()));
        // 钱包操作密码是手机号后六位
        String phone = userInfo.getPhone();
        userPurse.setOpCode(phone.substring(phone.length() - 6));
        return userPurseService.createUserPurse(userPurse);
    }

    // 根据用户账号获取用户信息
    @Override
    public UserInfo getUserInfo(UserInfo userInfo) {
        // 根据用户账号获取账户信息
        return userInfoDao.getUserInfo(userInfo.getPhone());
    }

    // 根据手机号码获取用户id
    @Override
    public Long getUserInfoUserId(String phone) {
        return userInfoDao.getUserInfoUserId(phone);
    }

    // 绑定推荐关系
    @Override
    public Boolean bindRecommendRelationship(UserInfo userInfo) {
        userInfo.setBindTime(DateUtil.getNowDateTime());
        return userInfoDao.bindRecommendRelationship(userInfo) > 0;
    }

    // 使用用户手机号码检查用户是否注册
    @Override
    public Boolean checkUserInfoRegistrationStatus(UserInfo userInfo) {
        // 如果不为空则表示已经注册
        return null != userInfoDao.getUserInfo(userInfo.getPhone());
    }

    // 获取下级用户信息
    @Override
    public ArrayList<UserInfo> getLowerUserInfoByUserId(Long userId) {
        return userInfoDao.getLowerUserInfoByUserId(userId);
    }


}
